<?
header( "Content-Type: text/html; Charset=utf-8" );

// ****************************************************************
// ファイル操作クラス
// ****************************************************************
class FileControl {
	// ****************************************************************
	// ファイルとディレクトリの一覧を取得し、
	// 連想配列としてデータを返す。
	// 
	// 引数
	// 第一：ファイルの保存先ディレクトリ（任意 defaultで./dir/）
	// 第二：ブラウザ出力キャラクタセット（任意）
	// 第三：サーバのキャラクタセット
	// 
	// 戻り値
	// ファイルデータの連想配列
	// ****************************************************************
	function file_view($file_dir = "./dir/", $source_cher = "utf-8", $server_cher = "sjis, auto"){
		$file_array = array();
		$cnt = 0;

		$dir = opendir( $file_dir );
		
		// ファイル探索
		while( $file = readdir( $dir ) ) {
		
			// ファイル名、パス名をブラウザ側キャラクタセットに変換し出力
			$file_name = mb_convert_encoding( $file, $source_cher, $server_cher);
			$file_path = mb_convert_encoding( $file_dir . $file, $source_cher, $server_cher);

			$file_array[$cnt]['name'] = $file_name;
			$file_array[$cnt]['path'] = $file_path;

			// ファイルチェック
			if( is_file( $file_dir . $file ) ) {
				$file_array[$cnt]['type'] = "file";
			} else {
				$file_array[$cnt]['type'] = "dir";
			}

		$cnt++;
		}

		return $file_array;
	}

	// ****************************************************************
	// ファイル名からファイルの中身を取得する
	// 
	// 引数
	// 第一：ファイル名（必須）
	// 第二：ブラウザ出力キャラクタセット（任意 defaultでutf-8）
	// 第三：サーバのキャラクタセット（任意 defaultでsjis）
	// 
	// 戻り値
	// ファイルのデータ
	// ****************************************************************
	function file_read($fname, $source_cher = "utf-8", $server_cher = "sjis"){

		$fname = $this->path_check($fname);

		// サーバのキャラクタセットに変換
		$file_name = mb_convert_encoding( $fname, $server_cher, $source_cher);

		// ファイルを開く
		$str = file_get_contents($file_name);

		// サーバのキャラクタセットをブラウザのキャラクタセットに戻す
		$str = mb_convert_encoding( $str, $source_cher, $server_cher);

		return $str;
	}

	function path_check($path){
		$parent = "..";

		// .. で親ディレクトリに上がろうとしている
		if( !(strpos($path, $parent) === false) ){
//			return "パスが正しくありません。";
			while(!(strpos($path, $parent) === false)){
//				$path = substr($path, strpos($path, $parent), strlen($parent));

				$path = substr($path, 0, strpos($path, $parent)) . substr($path, strpos($path, $parent) + strlen($parent), strlen($path));
//				, strlen($parent));
			}
		}

		// .から始まっていない
		if(!(substr($path, 0, 1) === ".")){
			$path = "." . $path;
		}

		// ファイルかディレクトリか
		if(is_dir( $path )){
			// /で終わっていない
			if( !(substr($path, -1) === "/") ){
				$path = $path . "/";
			}
		}

		return $path;

	}

}

// sample
/*
$fc = new FileControl();
$arr = $fc->file_view();
print "<pre>";print_r($arr);
print count($arr) . "\n";
print $fc->file_read("../../../../新しいテキスト ドキュメント.txt");
print "</pre>";
*/
?>